{{tag>carte_graphique système}}
-----
{{ https://wayland.freedesktop.org/wayland.png?70|}}

====== Wayland ======
**Wayland** est un **protocole** permettant à un **compositeur** de communiquer avec ses clients ; un [[https://fr.wikipedia.org/wiki/Compositeur_(logiciel)|compositeur]] étant un [[gestionnaire de fenêtres]] utilisant un tampon en mémoire pour gérer chaque fenêtre et y appliquer des effets visuels. 

Wayland est aussi le nom de la librairie implémentant ce protocole.

Les [[environnements]] %%GNU%%/Linux majeurs, tels que GNOME et KDE, supportent ou prévoient de supporter Wayland. Un compositeur nommé [[:Weston]] a été développé en même temps que Wayland pour servir de référence en terme d'implémentation du protocole.

Une **couche de compatibilité, XWayland**, permet de faire fonctionner la plupart des applications pour [[Xorg]] avec Wayland.

===== Pourquoi Wayland ? =====

Jusqu'à présent, l'affichage était géré par [[Xorg]], un logiciel proposant une implémentation libre d'un protocole (X11) datant des années 80.

Les usages ont beaucoup changé depuis, avec la généralisation des compositeurs graphiques avec des effets visuels avancés pour afficher les fenêtres, et donc un rendu complexe. Cela n'était pas du tout optimal, le protocole X11 n'ayant évidemment pas été conçu pour ça.

De plus, X11 pose un problème de **sécurité**, puisque les informations sont échangées (entre les fenêtres/applications) sans aucun souci de confidentialité, autorisant des applications à en "espionner" d'autres.

Wayland lui, isole les entrées/sorties de chaque fenêtre, et limite la quantité de code exécutée en tant que //root//((Pour plus de détails, voir [[https://forum.ubuntu-fr.org/viewtopic.php?pid=21783378#p21783378|ces explications très complètes d'un développeur d'Ubuntu]] sur le forum)).

L'architecture de Wayland optimise le fonctionnement des compositeurs, et facilite le rendu aujourd'hui complexe de l'image des fenêtres, en sécurité et avec de **meilleures performances**.

===== Pré-requis =====

Wayland fonctionne seulement avec les systèmes utilisant KMS ([[https://fr.wikipedia.org/wiki/Kernel-based_mode-setting|Kernel-based mode-setting]]), une fonctionnalité du noyau dépendant entre autres du pilote de carte graphique utilisé. Par exemple, avec les pilotes propriétaires nVidia, des réglages manuels peuvent être nécessaires((https://wiki.archlinux.org/index.php/NVIDIA#DRM_kernel_mode_setting)).

Un compositeur implémentant le protocole Wayland ([[Mutter]], [[Kwin]], [[:Enlightenment]], [[:Weston]]...) est aussi nécessaire (sinon Wayland tout seul ne fait rien, et c'est toujours un serveur X qui serait utilisé).

Les pilotes de cartes graphiques implémentent pour la plupart une API (interface de programmation) nommée GBM (//Generic Buffer Management//), à l'exception des pilotes propriétaires nVidia qui implémentent dans leur coin [[http://www.phoronix.com/scan.php?page=news_item&px=XDC2016-Device-Memory-API|EGLStreams]], EGLStreams n'étant pas supportée par tous les compositeurs existants (Sway et Mutter semblent être les seuls au moment de la rédaction de cet article).

===== Environnements =====

Les [[environnements]] de bureau majeurs suivants supportent Wayland : 

^ [[GNOME Shell]] | Environnement par défaut d'[[Ubuntu GNOME]] |
^ [[Enlightenment]] | Seule la version E17 est disponible dans les dépôts officiels |
^ [[KDE Plasma]] | Environnement par défaut d'[[Kubuntu]] |
^ Liri Shell | Bureau du projet Liri OS (non disponible sur Ubuntu) |
^ sway | [[gestionnaire de fenêtres]] en mosaïque (//tiling//) pour Wayland, héritier de i3 |

Wayland est aussi très utilisé dans le domaine des **smartphones avec Linux** (%%Plasma Mobile, Tizen OS, Sailfish OS%%), et même des **montres connectées %%GNU/Linux%%** ([[https://asteroidos.org/|Asteroid OS]]) !

D'autres [[gestionnaires de fenêtres]] moins répandus (et donc aussi absents des dépôts), ainsi que des environnements spécifiques à certaines utilisations marginales, ne sont pas détaillés ici.
===== Librairies graphiques =====

Ces informations sont fournies à titre indicatif, mais un système distribué nativement avec une session labellisée "Wayland" (//comme la session Wayland d'[[Ubuntu Gnome]] depuis sa version 17.04 par exemple//) devrait théoriquement gérer tout seul ces configurations.

=== GTK+ 3 ===
Régler la variable d'environnement ''GDK_BACKEND=wayland''.

GTK+ 3 est la librairie utilisée par les applications des environnements [[GNOME]], [[Mate]], [[Xfce]], [[Cinnamon]], [[Budgie]], ...

=== Qt 5 ===
Pour faire fonctionner une application Qt 5 avec le plugin Wayland, régler la variable d'environnement ''QT_QPA_PLATFORM=wayland-egl'' (le paquet fournissant le plugin devant être installé).

[[Qt]] est la librairie utilisée entre autres par les environnements [[KDE Plasma]], [[LXQt]], ou encore l'interface de LiriOS (non disponible pour Ubuntu).

=== Clutter ===

Régler la variable d'environnement ''CLUTTER_BACKEND=wayland''.

Clutter est entre autres utilisé pour les parties "pas en GTK+" de [[Gnome Shell]].

=== SDL ===

Un support expérimental de Wayland existe depuis SDL 2.0.2 ; Pour lancer une application SDL (principalement des jeux vidéos) sur Wayland, réglez ''SDL_VIDEODRIVER=wayland''.

=== GLFW ===

Un support expérimental de Wayland existe depuis GLFW 3.1 et peut être activé avec l'option CMake ''-DGLFW_USE_WAYLAND=ON'' au moment de la compilation.

=== EFL ===

Les librairies EFL (environnement [[Enlightenment]] et applications liées) supportent totalement Wayland. Voir [[https://wayland.freedesktop.org/efl.html|cette page]].

===== Weston =====

Weston est l'implémentation de référence d'un [[:gestionnaire de fenêtres|gestionnaire de fenêtre]] avec composition graphique pour Wayland.

Un article lui est dédié **[[:Weston|ici]]**.

==== Ce que nous apprend Weston ====

En terme de performances, on voit que les fenêtres peuvent être pivotées, animées, zoomées, leurs transparences modifiées, etc. bref, des effets de composition plutôt complexes. Pourtant, Weston reste très rapide, fluide et léger en mémoire. En comparaison, les temps de réactions des applications utilisant XWayland se ressentent d'ailleurs parfois.

Avec Wayland, l'enregistrement de l'écran (capture photo ou vidéo) **doit** être géré par l'environnement, alors qu'il était jusqu'à présent indépendant de l'environnement utilisé. Vos anciens logiciels de capture d'écran pour Xorg risquent de ne plus fonctionner !

Il s'agit là d'une question de sécurité : les applications n'ayant pas la possibilité de "connaître" la position et le contenu des fenêtres de leurs voisines avec Wayland, ces informations doivent être "demandées" à l'environnement (et notamment au compositeur en ce qui concerne les fenêtres).
===== Problèmes divers =====

==== Impossible de lancer une application comme admin ====

<note important>Cette manipulation réduit à néant les efforts de Wayland pour sécuriser la session. Pensez plutôt à avoir des usages "sains" des droits d'administration :
  * Utiliser [[:gnome-packagekit|GNOME Paquets]] au lieu de [[:Synaptic]]
  * Utiliser [[:gnome-disk-utility|GNOME Disques]] au lieu de [[:GParted]]
  * Utiliser des [[:commande_shell#action_sur_les_fichiers_et_repertoires|commandes de manipulation de fichiers]] plutôt que de faire "sudo nautilus".
Alternativement, il est toujours possible d'utiliser la session X.org pour des usages n'ayant pas d'alternative.
</note>
Wayland n'autorise pas de manipulations aussi dangereuses : cette éventualité devrait désormais être gérée individuellement par chaque environnement/application.

Une possibilité pour contourner ce problème est d'utiliser xhost pour autoriser "root" à accéder à la session X de l'utilisateur. En tant qu'utilisateur normal ("//localuser//" étant votre nom) :
<code>xhost si:localuser:root</code>
Après la manipulation, retirez l'accès :
<code>xhost -si:localuser:root</code>
	
===== Voir aussi =====

  * [[https://wayland.freedesktop.org/|Site officiel]]
  * (en) [[https://wiki.archlinux.org/index.php/wayland|Source principale]]
  * [[https://forum.ubuntu-fr.org/viewtopic.php?pid=21783378#p21783378|Explications d'un développeur d'Ubuntu sur le forum]].

-----

//Contributeurs : [[utilisateurs/roschan]], ...//
